Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [vb.net 2012] basse prestazioni per copiare lo schermo su una bitmap (graphics.copyfromscreen)!
Forum - C# / VB.NET - [vb.net 2012] basse prestazioni per copiare lo schermo su una bitmap (graphics.copyfromscreen)!

Avatar
masterz (Normal User)
Newbie


Messaggi: 8
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 12:26
Domenica, 10/11/2013
Salve a tutti , mi ritrovo con questo problema ,
vorrei avere un riquadro sulla mia form in cui e' visibile una parte dello schermo in tempo reale ,
per fare questo ho messo in loop il codice seguente :
Codice sorgente - presumibilmente VB.NET

  1. Dim bmpQuadro As Bitmap = New Bitmap(320, 320)
  2.                 Dim graph As Graphics = Nothing
  3.                 graph = Graphics.FromImage(bmpQuadro)
  4.                 graph.CopyFromScreen(BASE.X, BASE.Y, 0, 0, bmpQuadro.Size) ' copia la porzione di schermo
  5.                 graph.Dispose()



che poi un altra funzione ( anzi un thread apposito ) , dopo aver elaborato il bitmap , lo disegna continuamente sul form .

il problema e' che non riesco ad arrivare a 30 immagini per secondo , quindi la porzione di schermo non si vede fluidamente . Non e' il modo giusto di fare questa cosa .

Qualcuno sa consigliarmi un altro metodo per fare questo , che sia piu veloce ?

Ultima modifica effettuata da masterz il 10/11/2013 alle 12:28
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 2:26
Martedì, 12/11/2013
non so, ma forse è il loop che ti frega, e appesantisce l'esecuzione,
invece che in un loop prova a inserire il codice nel gestore di un evento (tipo quando la porzione di schermo cambia, e quindi effettivamente la bitmap va aggaiornata)

PM Quote
Avatar
masterz (Normal User)
Newbie


Messaggi: 8
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 12:52
Martedì, 12/11/2013
e' un bel problema , le sto provando tutte ,

riesco ora ad arrivare a 30 screen per secondo ,
ma il problema principale e' che richiamando graph.CopyFromScreen , si incanta tutta la form per un istante , nonostante abbia lanciato la funzione da un thread separato da quello principale ,
col risultato che in un'altra form , dove ho un altro loop che mi disegna continuamente le bitmap appena screenshoottate come base  piu' altri oggetti come rettangoli , linee , altre bitmap incollate piu' vari effetti grafici ,
in cui riesco a fare 90-100 cicli al secondo ... inizia ad essere scattosa pure quella !
Si nota anche muovendo la finestra di qualsiasi FORM , anche esterno alla mia applicazione , che durante il loop che fa screenshot , vanno tutte a scatti , e' come se CopyFromScreen incantasse tutto il sistema GDI di windows che disegna il desktop e le finestre ... ( e' GDI che disegna le finestre su windows... vero ?)


Ho provato anche ad usare directX per gli screenshot ... stesso risultato.

PM Quote
Avatar
masterz (Normal User)
Newbie


Messaggi: 8
Iscritto: 28/02/2011

Segnala al moderatore
Postato alle 14:04
Martedì, 12/11/2013
accidenti , la soluzione era molto piu' semplice del previsto ,

disabilitare AERO di win7

sono passato da 30fps a 180.

8-| ho perso una giornata di lavoro per questa cavolata.

PM Quote